/*
 *
 *  * | Licensed 未经许可不能去掉「OPENIITA」相关版权
 *  * +----------------------------------------------------------------------
 *  * | Author: xw2sy@163.com
 *  * +----------------------------------------------------------------------
 *
 *  Copyright [2024] [OPENIITA]
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * /
 */

package cc.iotkit.plugins.tcp.parser;

import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.parsetools.RecordParser;
import lombok.extern.slf4j.Slf4j;

import java.util.function.Consumer;

/**
 * 数据包读取器
 *
 *
 */
@Slf4j
public class DataReader {

    public static RecordParser getParser(Consumer<Buffer> receiveHandler) {
        System.out.println("DataReader RecordParser getParser start!!!");
        RecordParser parser = RecordParser.newFixed(4);
        Handler<Buffer> handler = new Handler<Buffer>() {
            int size = -1;
            public void handle(Buffer buff) {
                if (size == -1) {
                    size = buff.getInt(0) - 4;
                    parser.fixedSizeMode(size);
                } else {
                    receiveHandler.accept(buff);
                    parser.fixedSizeMode(4);
                    size = -1;
                }
            }
        };
        parser.setOutput(handler);
        return parser;
    }

}
